iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Python

30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手系列 第 26

為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?有什麼優點?【Python 處理 Excel #26】

  • 分享至 

  • xImage
  •  

本篇文章同步發布於 為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?有什麼優點?【Python 處理 Excel #26】

前言

學 Python 的 pandas 和 openpyxl 的初期都是慢慢摸索,想要什麼功能就去查那個功能怎麼用程式碼表現,到了後期專案的程式碼越寫越多,翻查修改程式碼就變得不太方便,如果能透過 Python 的類別 (Class) 將不同目的但相關聯的程式碼分開,再利用類別串接在一起,不僅提高程式碼的可讀性,後續要對程式碼進行增修也容易許多。這篇文章分享為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?使用類別的優點?


為什麼要用類別 (Class) 包裝程式碼?

使用類別通常能帶來以下好處:

  • 提高程式碼可讀性:將相關功能組織在同一個類別中,讓程式碼結構更加清晰。
  • 增加程式碼的可重用性:類別允許使用者建立多個物件,每個物件都可以擁有自己的屬性和方法。這樣可以避免重複編寫類似的程式碼。
  • 降低維護成本:需要修改功能時,只需對特定類別進行更改,避免大幅度影響現有程式碼的架構,也不用在整個程式碼中查詢和替換。
  • 封裝與數據保護:類別提供封裝 (encapsulation) 的能力,意思是類別能對使用者隱藏內部實作的細節,使用者只需關心如何使用這些方法,而不必了解其內部如何運作。封裝同時防止外部的程式碼直接訪問與修改內部可能含有敏感數據的程式碼,提高程式碼的安全性。
  • 支持繼承:類別支持繼承,透過父類別、子類別的概念建立新類別,不僅可以拓展現有類別的功能,而且不需要從頭開始編寫全新的程式碼。

如何使用類別包裝程式碼?

這次《Python 處理 Excel》系列文介紹許多使用 openpyxl 輸出 Excel 檔案的技巧,例如單純輸出 Excel 檔案、新增/複製/刪除工作表、設定 Excel 儲存格樣式、格式化為表格、群組欄位、凍結視窗等等,這一個又一個的功能在之前的文章中常以單獨的函數出現在程式碼案例,但它們都可以集合放在一個名稱類似 ExcelDataExporter 或 ExcelManager 的類別底下,變成該類別的方法。

建立 ExcelDataExporter 類別

下方是把處理 Excel 的 Python 程式碼放在 ExcelDataExporter 類別中管理的例子:

import pandas as pd
import openpyxl
from openpyxl.utils import get_column_letter
from openpyxl.worksheet.table import Table, TableStyleInfo

class ExcelDataExporter:
    def __init__(self, output_filename):
        """初始化 ExcelDataExporter,建立活頁簿和工作表"""
        self.output_filename = output_filename
        self.workbook = openpyxl.Workbook()  # 建立新的活頁簿
        self.worksheet = self.workbook.active  # 取得當前活躍的工作表
        self.worksheet.title = "Orders"  # 設定工作表名稱

    def add_data(self, data):
        """將數增加加到工作表中"""
        for row in data:
            self.worksheet.append(row)  # 將每一列數據增加到工作表

    def save(self):
        """儲存 Excel 檔案"""
        self.workbook.save(self.output_filename)  # 儲存到指定的檔案位置

    def add_sheet(self, sheet_name):
        """新增工作表"""
        self.workbook.create_sheet(title=sheet_name)

    def copy_sheet(self, source_sheet_name, new_sheet_name):
        """複製工作表"""
        source = self.workbook[source_sheet_name]
        new_sheet = self.workbook.copy_worksheet(source)
        new_sheet.title = new_sheet_name

    def delete_sheet(self, sheet_name):
        """刪除工作表"""
        del self.workbook[sheet_name]

    def set_cell_style(self, cell, font=None, fill=None, border=None):
        """設定儲存格樣式"""
        if font:
            cell.font = font
        if fill:
            cell.fill = fill
        if border:
            cell.border = border

    def freeze_panes(self, cell):
        """凍結視窗"""
        self.worksheet.freeze_panes = cell  # 凍結指定的儲存格上方和左側的區域

ExcelDataExporter 類別的用途

ExcelDataExporter 是專門用於操作和格式化 Excel 檔案的類別,類別內包含許多方法讓使用者建立、編輯和儲存 Excel 活頁簿,具體功能包括:

  • 建立和管理活頁簿:初始化一個新的 Excel 活頁簿,並設置當前活躍工作表的名稱。
  • 數據處理:提供方法將數據添加到工作表中,支持逐列寫入數據。
  • 操作工作表:能夠新增、複製和刪除工作表。
  • 格式化功能:可以針對工作表中的內容設定樣式。
  • 儲存檔案:提供方法儲存編輯後的 Excel 檔案到指定的位置。

如何使用已建立的 ExcelDataExporter 類別?

下方程式碼舉例如何在程式碼中使用先前建立的 ExcelDataExporter 類別:

exporter = ExcelDataExporter("styled_example.xlsx")

# 新增數據
data = [
    ['Product', 'Sales'],
    ['A', 100],
    ['B', 150],
]

exporter.add_data(data)  # 增加數據到工作表

# 新增一個新的工作表
exporter.add_sheet("Summary")

# 複製現有的工作表
exporter.copy_sheet("Orders", "Orders_Copy")

# 刪除一個工作表 (如果需要)
# exporter.delete_sheet("Summary")

# 設定儲存格樣式,例如:設置標題列的字體為粗體
font = openpyxl.styles.Font(bold=True)
for cell in exporter.worksheet[1]:
    exporter.set_cell_style(cell, font=font)

# 凍結第一列 (標題列)
exporter.freeze_panes("A2")

# 儲存 Excel 檔案
exporter.save()

當有了 ExcelDataExporter 類別,在程式其他地方對於 Excel 檔案的操作變得更簡單直觀,開發時就可以專注處理數據內容,不必擔心用 Python 輸出 Excel 檔案的底層實作細節。


總結

使用類別包裝處理 Excel 的程式碼除了提高程式碼的可讀性和可維護性,還為程式專案的架構保留擴增的彈性。透過把相關功能的程式碼組織在同一個類別,能建立更加模組化、可重複使用的程式架構,如此一來不僅幫助自己管理程式碼,也讓其他人更容易理解與使用已經撰寫好的類別,進而促進團隊合作,提升工作時的效率。

本篇文章同步發布於 為什麼要用類別 (Class) 包裝處理 Excel 的程式碼?有什麼優點?【Python 處理 Excel #26】


上一篇
如何使用 Python 的 openpyxl 建立 Excel 圖表?【Python 處理 Excel #25】
下一篇
Python 如何使用 Tkinter 套件建立能上傳 Excel 檔案的介面?【Python 處理 Excel #27】
系列文
30 天學會用 Python pandas 和 openpyxl 處理 Excel —— 成為用 Python 處理 Excel 檔案的高手27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言